/**
 * 
 */
package com.rf.richfitwheel.admin.sys.service;

import com.rf.richfitwheel.admin.sys.model.User;
import com.rf.richfitwheel.admin.sys.model.UserDeptChange;
import com.rf.richfitwheel.admin.sys.model.UserStation;
import com.rf.richfitwheel.admin.sys.model.UserStatistics;
import com.rf.richfitwheel.admin.sys.vo.UserVO;
import com.rf.richfitwheel.common.utils.PageUtils;
import net.sf.json.JSONArray;

import java.util.List;
import java.util.Map;

/**
 * 系统用户
 * @author hushouquan
 *
 */
public interface SysUserService {

	/**
	 * 分页查询
	 * @param params
	 * @param userVO
	 * @return
	 */
	PageUtils queryPage(Map<String, Object> params, UserVO userVO);

	/**
	 * 修改密码
	 * @param userVO
	 * @param password
	 * @param newPassword
	 * @return
	 */
	boolean updatePassword(UserVO userVO, String password, String newPassword);

	/**
	 * 重置密码
	 * @param userId
	 * @param opUser
	 * @return
	 */
	String resetPassword(String userId, UserVO opUser);
	
	/**
	 * 判断用户名是否可用，返回true代表不可用
	 * @param username
	 * @param tenantId 
	 * @return
	 */
	boolean checkUserName(String username, String tenantId);


	/**
	 * 根据id获取用户信息
	 * @param userId
	 * @return
	 */
	User selectById(String userId);

	/**
	 * 删除用户，逻辑删除
	 * @param userIds
	 */
	void deleteBatch(String[] userIds);

	/**
	 * 获取用户岗位信息
	 * @param userId
	 * @return
	 */
	List<UserStation> getUserStationList(String userId);

	/**
	 * 设置用户岗位
	 * @param userId 用户id
	 * @param stationList 岗位列表
	 * @param userOp 操作人
	 */
	void setUserStation(String userId, List<UserStation> stationList, UserVO userOp);

	/**
	 * 查找所有的用户
	 * @param tenantId
	 * @return
	 */
	List<User> getAllUserByTenantId(String tenantId);

	List<User> getAllUserByStationIds(String stationIds);

    void save(User user, JSONArray mngOrgArr);

    void update(User user, JSONArray mngOrgArr, String moduleType);

	/**
	 * 根据orgCode查询没同步的用户（来自账户系统的数据），分页
	 * @param params
	 * @param userVO
	 * @return
	 */
	PageUtils queryPageListTemp(Map<String, Object> params, UserVO userVO);

	/**
	 * 将账户系统同步过来的用户数据入库
	 * @param param
	 * @param user
	 */
	void importUsersFromAccount(Map param, UserVO user);

	/**
	 * 获取机构下用户信息
	 * @param orgId
	 * @return
	 */
    List<User> getUserListByOrgId(String orgId);

	/**
	 * 批量调整用户部门
	 * @param param
	 * @param user
	 */
	void changeUsersDept(UserDeptChange param, UserVO user);

	/**
	 * 内部处理数据用，请注掉
	 * @return 没用
	 */
	String resetPasswordBath();
	
	/**
	 * 根据id查询用户
	 *
	 * @param userIds
	 * @return
	 */
	List<User> getUsersOnly(List<String> userIds);
	
	String resetPasswordSimple(String userId);
	
	/**
	 * 系统管理员查用户
	 * @param params params {username:,staffName:,enterpriseName:,orgCode:,orgName,staffId:,status:}
	 * @param userVO 用户
	 * @return 分页数据
	 */
    PageUtils queryPageAdmin(Map<String, Object> params, UserVO userVO);
	
	/**
	 * 将状态为删除的用恢复回来变成状态正常的
	 * @param id 用户id
	 */
	void rollbackUser(String id);
	
	/**
	 * 物理删除用户，慎用
	 * @param id 用户id
	 */
	void deletePhysical(String id);
	
	/**
	 * 根据accountName查询用户
	 * @param accountName accountName
	 * @return 用户
	 */
	User selectByAccount(String accountName);


	/**
	 * 根据staffId查询用户
	 * @param staffId String
	 * @return 用户
	 */
	User selectByStaffId(String staffId);

	/**
	 * 根据userName查询用户
	 *
	 * @param userName String
	 * @return 用户
	 */
	User selectByUserName(String userName);


	/**
	 * 统计用户信息
	 * @return 用户统计信息
	 */
	UserStatistics userStatistics();
}
